home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.1 (Developer) [x86] / NeXT Step 3.1 Intel dev.cdr.dmg / NextDeveloper / Makefiles / app / app.make next >
Text File  |  1993-03-30  |  14KB  |  325 lines

  1. #
  2. #                                  app.make
  3. #
  4. # Inputs from Makefile.preamble (no defaults):
  5. #    OTHER_CFLAGS - Flags passed to compiler (in addition to -g, -O, etc.)
  6. #    OTHER_LDFLAGS - Flags passed to ld (in addition to -ObjC, etc.)
  7. #    OTHER_OFILES - Additional relocatables that may be linked in
  8. #    OTHER_LIBS - Libraries to link with when making app target
  9. #    OTHER_DEBUG_LIBS - Libraries to link with when making debug target
  10. #    OTHER_PROF_LIBS - Libraries to link with when making profile target
  11. #    OTHER_JAPANESE_LIBS - 'app' libraries when $(JAPANESE) = "YES"
  12. #    OTHER_JAPANESE_DEBUG_LIBS - 'debug' libraries when $(JAPANESE) = "YES"
  13. #    OTHER_JAPANESE_PROF_LIBS - 'profile' libs when $(JAPANESE) = "YES"
  14. #    OTHER_PRODUCT_DEPENDS - Other dependencies of this project
  15. #    OTHER_SOURCEFILES - Other source files maintained by .pre/postamble
  16. #    OTHER_GARBAGE - Additional files to be removed by make 'clean' 
  17. #
  18. #    MSGFILES - .msg files that should have msgwrap run on them
  19. #    DEFSFILES - .defs files that should have mig run on them
  20. #    MIGFILES - .mig files (no .defs files) that should have mig run on them
  21. #
  22. #    PRECOMPS - Precompiled headers that should be built before compilation 
  23. #    OTHER_INITIAL_TARGETS - Targets to be built before subprojects, etc.
  24. #
  25. #    DSTROOT - Virtual root directory prepended to $(INSTALLDIR)
  26. #
  27. # Inputs from Makefile.postamble (with defaults set in common.make):
  28. #    OPTIMIZATION_CFLAG - Optimization flag passed to compiler (default: -O)
  29. #    NORMAL_CFLAGS - Flags passed to compiler in normal compiles
  30. #    DEBUG_CFLAGS - Flags passed to compiler in 'debug' compiles
  31. #    PROFILE_CFLAGS - Flags passed to compiler in 'profile' compiles
  32. #    INSTALL_AS_USER - User to chown app to at installation (default root)
  33. #    INSTALL_AS_GROUP - Grp to chgrp app to at installation (default wheel)
  34. #    INSTALL_PERMISSIONS - If set, 'install' chmod's executable to this.
  35. #    MAKEFILES - Makefiles this project depends on (default = Makefile)
  36. #
  37. #    RELOCATABLE_STRIP_OPTS - Opts to strip for bundles (default = -x -u)
  38. #    DYLD_APP_STRIP_OPTS - Opts to strip for apps w/ bundles (def. = -A -n)
  39. #    APP_STRIP_OPTS - Opts to strip for apps w/o bundles (no default, but
  40. #          developers doing their own dynamic loading should set this to 
  41. #          $(DYLD_APP_STRIP_OPTS)
  42. #    BUNDLE_EXTENSION - Extension for name of bundle dir (default = .bundle)
  43. #
  44. # Inputs from Makefile (avoid setting these, ProjectBuilder controls them):
  45. #    NAME - name of application
  46. #    LANGUAGE - langage in which the project is written (default "English")
  47. #    ENGLISH - boolean flag set iff $(LANGUAGE) = "English"
  48. #    JAPANESE - boolean flag set iff $(LANGUAGE) = "Japanese"
  49. #    LOCAL_RESOURCES - localized resources (e.g. nib's, images) of project
  50. #    GLOBAL_RESOURCES - non-localized resources of project
  51. #    PROJECTVERSION - version of ProjectBuilder that output Makefile
  52. #    APPICON - application icon file
  53. #    DOCICONS - dock icon files
  54. #    ICONSECTIONS - Specifies icon sections when linking executable 
  55. #
  56. #    CLASSES - Class implementation files in project.
  57. #    HFILES - Header files in project.
  58. #    MFILES - Other Objective-C source files in project. 
  59. #    CFILES - Other C source files in project. 
  60. #    PSWFILES - .psw files in the project
  61. #    PSWMFILES - .pswm files in the project
  62. #    SUBPROJECTS - Subprojects of this project
  63. #    BUNDLES - Bundle subprojects of this project
  64. #    OTHERSRCS - Other miscellaneous sources of this project
  65. #    OTHERLINKED - Source files not matching a standard source extention
  66. #
  67. #    LIBS - Libraries to link with when making app target
  68. #    DEBUG_LIBS - Libraries to link with when making debug target
  69. #    PROF_LIBS - Libraries to link with when making profile target
  70. #    OTHERLINKEDOFILES - Other relocatable files to (always) link in.
  71. #
  72. #    APP_MAKEFILE_DIR - Directory in which to find generic set of Makefiles
  73. #    MAKEFILEDIR - Directory in which to find $(MAKEFILE)
  74. #    MAKEFILE - Top level mechanism Makefile (e.g., app.make, bundle.make)
  75. #    INSTALLDIR - Directory app will be installed into by 'install' target
  76. #
  77.  
  78. APPICONFLAGS =  -sectcreate __ICON __header $(NAME).iconheader  \
  79.         -segprot __ICON r r $(ICONSECTIONS) \
  80.                 $(OTHER_ICONSECTIONS)
  81.  
  82. ICONHEADER = $(NAME).iconheader
  83. PRODUCT_ROOT = $(SYMROOT)/$(NAME).app
  84.  
  85. APP_MAKEFILE_DIR = /NextDeveloper/Makefiles/app
  86. include $(APP_MAKEFILE_DIR)/common.make
  87.  
  88.  
  89. all:: app
  90.  
  91.     
  92. app::
  93.     @($(MKDIRS) $(SYMROOT)/$(NAME).app ; \
  94.     evaled_rc_archs="$(RC_ARCHS)"; \
  95.     obj_dir=`echo $$evaled_rc_archs | sed 's/ /_/g'`_obj ; \
  96.     if [ "$(ENGLISH)" = "YES" -o "$(JAPANESE)" != "YES" ] ; then \
  97.     $(MAKE) project \
  98.         "PRODUCT_ROOT = $(SYMROOT)/$(NAME).app" \
  99.         "PRODUCT = $(SYMROOT)/$(NAME).app/$(NAME)" \
  100.         "OFILE_DIR = $(OBJROOT)/$$obj_dir" \
  101.         "PROJ_CFLAGS = $(NORMAL_CFLAGS)" \
  102.         "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
  103.         "RC_CFLAGS = $(RC_CFLAGS)" \
  104.         "RC_ARCHS = $(RC_ARCHS)" \
  105.         "SRCROOT = $(SRCROOT)" \
  106.         "OBJROOT = $(OBJROOT)" \
  107.         "SYMROOT = $(SYMROOT)/sym" \
  108.         "SYM_DIR = $(SYMROOT)/sym" ; \
  109.     else \
  110.     $(MAKE) project \
  111.         "PRODUCT_ROOT = $(SYMROOT)/$(NAME).app" \
  112.         "PRODUCT = $(SYMROOT)/$(NAME).app/$(NAME)" \
  113.         "OFILE_DIR = $(OBJROOT)/$$obj_dir" \
  114.         "PROJ_CFLAGS = $(NORMAL_CFLAGS) -DKANJI" \
  115.         "LIBS = $(LIBS:lNeXT_s=lNeXTJ_s)" \
  116.         "OTHER_LIBS = $(OTHER_LIBS:lNeXT_s=lNeXTJ_s)" \
  117.         "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
  118.         "RC_CFLAGS = $(RC_CFLAGS)" \
  119.         "RC_ARCHS = $(RC_ARCHS)" \
  120.         "SRCROOT = $(SRCROOT)" \
  121.         "OBJROOT = $(OBJROOT)" \
  122.         "SYMROOT = $(SYMROOT)/sym" \
  123.         "SYM_DIR = $(SYMROOT)/sym" ; \
  124.     fi )
  125.  
  126. debug::
  127.     @($(MKDIRS) $(NAME).debug ; \
  128.     evaled_rc_archs="$(RC_ARCHS)"; \
  129.     obj_dir=`echo $$evaled_rc_archs | sed 's/ /_/g'`_debug_obj ; \
  130.     if [ "$(ENGLISH)" = "YES" -o "$(JAPANESE)" != "YES" ] ; then \
  131.     $(MAKE) project \
  132.         "PRODUCT_ROOT = $(SYMROOT)/$(NAME).debug" \
  133.         "PRODUCT = $(SYMROOT)/$(NAME).debug/$(NAME)" \
  134.         "OFILE_DIR = $(OBJROOT)/$$obj_dir" \
  135.         "PROJ_CFLAGS = $(DEBUG_CFLAGS)" \
  136.         "LIBS = $(DEBUG_LIBS)" "OTHER_LIBS = $(OTHER_DEBUG_LIBS)" \
  137.         "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
  138.         "RC_CFLAGS = $(RC_CFLAGS)" \
  139.         "RC_ARCHS = $(RC_ARCHS)" \
  140.         "SRCROOT = $(SRCROOT)" \
  141.         "OBJROOT = $(OBJROOT)" \
  142.         "SYMROOT = $(SYMROOT)/sym" \
  143.         "SYM_DIR = $(SYMROOT)/sym" ; \
  144.     else \
  145.     $(MAKE) project \
  146.         "PRODUCT_ROOT = $(SYMROOT)/$(NAME).debug" \
  147.         "PRODUCT = $(SYMROOT)/$(NAME).debug/$(NAME)" \
  148.         "OFILE_DIR = $(OBJROOT)/$$obj_dir" \
  149.         "PROJ_CFLAGS = $(DEBUG_CFLAGS) -DKANJI $(CFLAGS)" \
  150.         "LIBS = $(DEBUG_LIBS:lNeXT_s=lNeXTJ_s)" \
  151.         "OTHER_LIBS = $(OTHER_DEBUG_LIBS:lNeXT_s=lNeXTJ_s)" \
  152.         "OTHER_JAPANESE_LIBS = $(OTHER_JAPANESE_DEBUG_LIBS)" \
  153.         "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
  154.         "RC_CFLAGS = $(RC_CFLAGS)" \
  155.         "RC_ARCHS = $(RC_ARCHS)" \
  156.         "SRCROOT = $(SRCROOT)" \
  157.         "OBJROOT = $(OBJROOT)" \
  158.         "SYMROOT = $(SYMROOT)/sym" \
  159.         "SYM_DIR = $(SYMROOT)/sym" ; \
  160.     fi )
  161.  
  162. profile::
  163.     @($(MKDIRS) $(NAME).profile ; \
  164.     evaled_rc_archs="$(RC_ARCHS)"; \
  165.     obj_dir=`echo $$evaled_rc_archs | sed 's/ /_/g'`_profile_obj ; \
  166.     if [ "$(ENGLISH)" = "YES" -o "$(JAPANESE)" != "YES" ] ; then \
  167.     $(MAKE) project \
  168.         "PRODUCT_ROOT = $(SYMROOT)/$(NAME).profile" \
  169.         "PRODUCT = $(SYMROOT)/$(NAME).profile/$(NAME)" \
  170.         "OFILE_DIR = $(OBJROOT)/$$obj_dir" \
  171.         "PROJ_CFLAGS = $(PROFILE_CFLAGS)" \
  172.         "LIBS = $(PROF_LIBS)" "OTHER_LIBS = $(OTHER_PROF_LIBS)" \
  173.         "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
  174.         "RC_CFLAGS = $(RC_CFLAGS)" \
  175.         "RC_ARCHS = $(RC_ARCHS)" \
  176.         "SRCROOT = $(SRCROOT)" \
  177.         "OBJROOT = $(OBJROOT)" \
  178.         "SYMROOT = $(SYMROOT)/sym" \
  179.         "SYM_DIR = $(SYMROOT)/sym" ; \
  180.     else \
  181.     $(MAKE) project \
  182.         "PRODUCT_ROOT = $(SYMROOT)/$(NAME).profile" \
  183.         "PRODUCT = $(SYMROOT)/$(NAME).profile/$(NAME)" \
  184.         "OFILE_DIR = $(OBJROOT)/$$obj_dir" \
  185.         "PROJ_CFLAGS = $(PROFILE_CFLAGS) -DKANJI" \
  186.         "LIBS = $(PROF_LIBS:lNeXT_s=lNeXTJ_s)" \
  187.         "OTHER_LIBS = $(OTHER_PROF_LIBS:lNeXT_s=lNeXTJ_s)" \
  188.         "OTHER_JAPANESE_LIBS = $(OTHER_JAPANESE_PROF_LIBS)" \
  189.         "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
  190.         "RC_CFLAGS = $(RC_CFLAGS)" \
  191.         "RC_ARCHS = $(RC_ARCHS)" \
  192.         "SRCROOT = $(SRCROOT)" \
  193.         "OBJROOT = $(OBJROOT)" \
  194.         "SYMROOT = $(SYMROOT)/sym" \
  195.         "SYM_DIR = $(SYMROOT)/sym" ; \
  196.     fi )
  197.  
  198.  
  199.  
  200. depend:: Makefile.dependencies $(SUBPROJECTS:.subproj=.depend) $(BUNDLES:.bproj=.depend)
  201.  
  202. # Note: The order of the following project dependencies is very important.  subcomponents must be after $(PROJECT_OFILES) in case a subcomponent relies upon something (e.g. generated .h file) at the top level, but all subprojects must be built (hopefully by one invocation of make in that subdirectory) before the $(PRODUCT) can be linked.
  203.  
  204. project::   $(INITIAL_TARGETS) toplevel_subcomponents resources $(PRODUCT)
  205.  
  206. toplevel_subcomponents:: subprojs bundles
  207.     -@($(RM) -f $(PRODUCT_ROOT)/$(CHANGES_FILE) ; \
  208.     $(ECHO) "$(OFILE_DIR)" > $(PRODUCT_ROOT)/$(CHANGES_FILE))
  209.  
  210. $(PRODUCT): $(PRODUCT_DEPENDS) $(OTHER_PRODUCT_DEPENDS)
  211.     @(adaptors="" ; \
  212.     for adaptor in $(OTHERRELOCATABLES) none ; do \
  213.         if [ $$adaptor = "none" ] ; then break; fi ; \
  214.         for path in $(ADAPTOR_SEARCH_PATH) none ; do \
  215.             if [ $$path = "none" ] ; then break; fi ;\
  216.             if [ -r $$path/$$adaptor ] ; then \
  217.             adaptors="$$adaptors $$path/$$adaptor" ; \
  218.             break ; \
  219.         fi ; \
  220.         done ; \
  221.     done ; \
  222.     if [ "$(ENGLISH)" = "YES" -o "$(JAPANESE)" != "YES" ] ; then \
  223.         cmd="$(CC) $(ALL_CFLAGS) -ObjC $(LDFLAGS) $(OTHER_LDFLAGS) \
  224.              $(APPICONFLAGS) -o $(PRODUCT) $(OFILES) $(OTHER_OFILES) \
  225.          $$adaptors $(OTHER_LIBS) $(LIBS)" ; \
  226.     else \
  227.         cmd="$(CC) $(ALL_CFLAGS) -ObjC $(LDFLAGS) $(OTHER_LDFLAGS) \
  228.              $(APPICONFLAGS) -o $(PRODUCT) $(OFILES) $(OTHER_OFILES) \
  229.          $$adaptors $(OTHER_JAPANESE_LIBS) $(OTHER_LIBS) $(LIBS)" ; \
  230.       fi ; \
  231.     echo $$cmd ; \
  232.     $$cmd    )
  233.     
  234.  
  235. $(DSTROOT)$(INSTALLDIR):
  236.     $(MKDIRS) $(DSTROOT)$(INSTALLDIR)
  237.  
  238. before_install:: $(DSTROOT)$(INSTALLDIR)
  239.     $(RM) -rf $(DSTROOT)$(INSTALLDIR)/$(NAME).app
  240.  
  241. after_install::
  242.  
  243.  
  244. install:: app before_install installhdrs $(OTHER_INSTALL_DEPENDS)
  245.     (cd $(SYMROOT); $(TAR) chf - $(NAME).app) | (cd $(DSTROOT)$(INSTALLDIR); $(TAR) xf -)
  246.     @somebundles=no; \
  247.     for i in $(BUNDLES:.bproj=) none ; do \
  248.         if [ $$i = none ] ; then continue; fi; \
  249.         somebundles=yes; \
  250.         $(ECHO) $(STRIP) $(RELOCATABLE_STRIP_OPTS) $(DSTROOT)$(INSTALLDIR)/$(NAME).app/$$i.bundle/$$i; \
  251.         $(STRIP) $(RELOCATABLE_STRIP_OPTS) $(DSTROOT)$(INSTALLDIR)/$(NAME).app/$$i.bundle/$$i; \
  252.     done; \
  253.     if [ $$somebundles = yes ] ; then \
  254.         $(ECHO) $(STRIP) $(DYLD_APP_STRIP_OPTS) $(DSTROOT)$(INSTALLDIR)/$(NAME).app/$(NAME); \
  255.         $(STRIP) $(DYLD_APP_STRIP_OPTS) $(DSTROOT)$(INSTALLDIR)/$(NAME).app/$(NAME); \
  256.     else \
  257.         $(ECHO) $(STRIP) $(APP_STRIP_OPTS) $(DSTROOT)$(INSTALLDIR)/$(NAME).app/$(NAME); \
  258.         $(STRIP) $(APP_STRIP_OPTS) $(DSTROOT)$(INSTALLDIR)/$(NAME).app/$(NAME); \
  259.     fi
  260.     $(RM) -f $(DSTROOT)$(INSTALLDIR)/$(NAME).app/$(CHANGES_FILE)
  261.     -$(CHOWN) -Rf $(INSTALL_AS_USER).$(INSTALL_AS_GROUP) \
  262.         $(DSTROOT)$(INSTALLDIR)/$(NAME).app
  263.     -$(CHMOD) -Rf go-w $(DSTROOT)$(INSTALLDIR)/$(NAME).app
  264.     @(if [ "$(INSTALL_PERMISSIONS)" != "" ] ; then \
  265.         $(ECHO) $(CHMOD) -f $(INSTALL_PERMISSIONS) \
  266.             $(DSTROOT)$(INSTALLDIR)/$(NAME).app/$(NAME); \
  267.         $(CHMOD) -f $(INSTALL_PERMISSIONS) \
  268.             $(DSTROOT)$(INSTALLDIR)/$(NAME).app/$(NAME); \
  269.     fi)
  270.     @(evaled_rc_archs="$(RC_ARCHS)"; \
  271.     obj_dir=`echo $$evaled_rc_archs | sed 's/ /_/g'`_obj ; \
  272.     $(MAKE) after_install     "DSTROOT=$(DSTROOT)" \
  273.                        "OBJROOT=$(OBJROOT)" \
  274.                 "SYMROOT = $(SYMROOT)/sym" \
  275.                 "SYM_DIR = $(SYMROOT)/sym" \
  276.                 "PRODUCT_ROOT = $(SYMROOT)/$(NAME).app" \
  277.                 "PRODUCT = $(SYMROOT)/$(NAME).app/$(NAME)" \
  278.                 "OFILE_DIR = $(OBJROOT)/$$obj_dir" \
  279.                 "PROJ_CFLAGS = $(NORMAL_CFLAGS)" \
  280.                 "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
  281.                 "RC_CFLAGS = $(RC_CFLAGS)" \
  282.                 "RC_ARCHS = $(RC_ARCHS)" )
  283.                 
  284.  
  285. #.DEFAULT 
  286.  
  287. help:
  288.     @if (test "$<"); then        \
  289.         $(ECHO) 'ERROR: Unrecognized Makefile target "$<"';    \
  290.     fi
  291.     @$(ECHO) 'The following targets are available:'
  292.     @$(ECHO) 
  293.     @$(ECHO) ' all         Makes the app target (below).  This is the default target.'
  294.     @$(ECHO) 
  295.     @$(ECHO) ' app         Compiles and links an optimized (and debuggable) version of the'
  296.     @$(ECHO) '             project, ready to install, into <ProjectName>.app.'
  297.     @$(ECHO)      
  298.     @$(ECHO) ' debug       Compiles (with all warnings and -DDEBUG on) and links a '
  299.     @$(ECHO) '             fully-debuggable version of the project into a <ProjectName>.debug' 
  300.     @$(ECHO) '             "app wrapper".'
  301.     @$(ECHO) 
  302.     @$(ECHO) ' profile     Compiles (with all warnings and -DPROFILE on) and links a'
  303.     @$(ECHO) '             version of the project into <ProjectName>.profile.'
  304.     @$(ECHO) '             "app wrapper" that will, when run, generate a gprof report.'
  305.     @$(ECHO) 
  306.     @$(ECHO) ' depend      Generates an optional Makefile.dependencies file for every level'
  307.     @$(ECHO) '             of the project to reflect the complete dependency graph'
  308.     @$(ECHO) '             (including headers).'
  309.     @$(ECHO) 
  310.     @$(ECHO) ' install     Builds (if needed) and copies <ProjectName>.app into the'
  311.     @$(ECHO) '             installation directory, setting permissions and owners as'
  312.     @$(ECHO) '             appropriate.'
  313.     @$(ECHO) 
  314.     @$(ECHO) ' installsrc  Installs the source files for the project into the directory'
  315.     @$(ECHO) '             specified in the SRCROOT variable in a command-line argument.'
  316.     @$(ECHO) '             Note: the target directory will be removed and recreated.'
  317.     @$(ECHO)        
  318.     @$(ECHO) ' installhdrs Installs the source files for the project.'
  319.     @$(ECHO) 
  320.     @$(ECHO) ' clean       Removes all files in the project derived from previous builds.'
  321.     @$(ECHO)  
  322.     @$(ECHO) ' help        Lists these targets with their descriptions.'
  323.     @$(ECHO) 
  324.     @$(ECHO) 'For more details, see the comments in /NextDeveloper/Makefiles/app/*.make.'
  325.